package com.cjie.ecommerce.service;

import com.cjie.ecommerce.entity.Category;
import com.cjie.ecommerce.entity.Product;

import java.util.List;
import java.util.Map;

/**
 * 商品服务接口
 */
public interface ProductWithSimpleCacheService {
    /**
     * 根据产品编号获取产品信息，带多级缓存。
     * @param id 产品编号
     */
    Product getProductByIdWithMultiCache(Long id);
    /**
     * 根据产品编号获取产品信息，带多级缓存，缓存键使用OGNL表达式生成。
     * @param id 产品编号
     */
    Product getProductByIdWithMultiCacheOgnl(Long id);
    /**
     * 根据产品编号获取产品信息，带本地缓存
     * @param id 产品编号
     */
    Product getProductByIdWithLocalCache(Long id);


    /**
     * 获取指定分类下的精选产品，带本地缓存
     *
     * @param category 类别对象【仅用于演示相关缓存注解的用法，实际项目中是不会这么传数据的】
     * @return
     */
    List<Product> getSelectedProductsByCategory(Category category);

    /**
     * 获取热门产品列表。
     * 仅使用分布式缓存
     */
    List<Product> getHotProducts();
    /**
     * 获取所有产品信息
     */
    List<Product> getAllProducts();
    /**
     * 修改产品信息
     * @param product 新的产品信息
     */
    Product updateProduct(Product product);
    /**
     * 删除产品
     * @param id 产品编号
     */
    void deleteProduct(Long id);
    /**
     * 创建产品信息
     * @param product 产品信息
     */
    Product createProduct(Product product);
    /**
     * 获取所有的分类信息。
     */
    List<Category> getAllCategories();
    /**
     * 获取产品的详细信息，带多级缓存，使用指定方法生成缓存键
     * @param productId 产品编号
     */
    Map<String, Object> getProductDetail(Long productId);
}